using Pdf2epub.Model;
using System.Threading.Tasks;

namespace Pdf2epub.Interfaces
{
    public interface IControler
    {
        string HtmlFolder { get; }

        int NumberOfPages { get; }

        IProjectContext ProjectContext { get; }

        void AssignFont(ContentBlock contentBlock, HtmlReplacement htmlReplacement);

        void AssignFont(FontAssignmentData fontAssignmentData, HtmlReplacement htmlReplacement);

        void DeleteContentBlockAtIndex(int selectedIndex);

        void ExtractFromSource();

        Task ExtractFromSourceAsync();

        string GetHtml(ContentBlock[] contentBlocks);

        Task<string> GetHtmlAsync(ContentBlock[] contentBlocks);

        void InsertEmptyTableBlockAtIndex(int selectedIndex);

        void InsertEmptyTextBlockAtIndex(int selectedIndex);

        void InsertTableColumnIntoSubBlockCollection(ContentBlock tableBlock);

        void InsertTableRowIntoSubBlockCollection(ContentBlock tableBlock);

        void JoinBlocks(ContentBlock contentBlock);

        void JoinMarkedBlocks();

        void OpenPdf(string path);

        Task OpenPdfAsync(string path);

        void OverrideAssignment(ContentBlock contentBlock, HtmlReplacement htmlReplacement);

        void OverrideHtmlTag(ContentBlock contentBlock, HtmlReplacementTag tag);

        void RemoveDuplicateWhitespaceFromParagraphBlocks();

        void RemoveLastColumnFromSubBlockCollection(ContentBlock tableBlock);

        void RemoveLastRowFromSubBlockCollection(ContentBlock tableBlock);

        void RemoveMarkedBlocks();

        Task RunFontAnalysisAsync();

        void Save();

        void TransformHtmlToEpub();

        Task TransformHtmlToEpubAsync();

        void TransformToHtml(string targetFolder);

        Task TransformToHtmlAsync(string targetFolder);

        void UnJoinBlocks(ContentBlock contentBlock);
    }
}